/*
 * @Author: 橘子
 * @Project_description: 文件
 * @Description: 代码是我抄的，不会也是真的
 */
'use strict'
const fsextra = require('fs-extra')
const fs = require('fs')

// 检查 fs-extra 是否正确加载
if (!fsextra) {
  console.error('fs-extra 模块未正确加载')
  process.exit(1)
}

/**
 * @Description: 递归读取目录下的所有文件
 * @author 橘子
 * @date 2023-06-27
 */
const readDirDepthFileSync = (path, suffix = false, dirList = [], currentPath = '') => {
  try {
    // 读取目录
    const pa = fs.readdirSync(path)
    pa.forEach((ele) => {
      const info = fs.statSync(`${path}/${ele}`)
      if (info.isDirectory()) {
        const newPath = currentPath ? `${currentPath}/${ele}` : ele
        readDirDepthFileSync(`${path}/${ele}`, suffix, dirList, newPath)
      } else {
        if (suffix) {
          dirList.push(currentPath ? `${currentPath}/${ele}` : ele)
        } else {
          dirList.push(`${path}/${ele}`)
        }
      }
    })
    return dirList
  } catch (e) {
    console.error('readDirDepthFileSync 错误:', e)
    return dirList
  }
}

/**
 * @Description: 同步读取目录下所有目录
 * @author 橘子
 * @date 2023-06-28
 */
const readDirSync = (path, suffix = false) => {
  try {
    // 读取目录
    const pa = fs.readdirSync(path)
    let dirList = []
    pa.forEach((ele) => {
      const info = fs.statSync(`${path}/${ele}`)
      if (info.isDirectory()) {
        if (suffix) {
          dirList.push(`${ele}`)
        } else {
          dirList.push(`${path}/${ele}`)
        }
      }
    })
    return dirList
  } catch (e) {
    console.error('readDirSync 错误:', e)
    return []
  }
}

/**
 * @Description: 判断文件或者目录是否存在
 * @author 橘子
 * @date 2023-06-28
 */
const pathFileIsEmptyAsync = (src) => {
  try {
    return fs.existsSync(src)
  } catch (e) {
    console.error('pathFileIsEmptyAsync 错误:', e)
    return false
  }
}

/**
 * @Description: 写文件
 * @author 橘子
 * @date 2023-06-28
 */
const inputFileAsync = (src, text) => {
  try {
    fsextra.outputFileSync(src, text)
  } catch (e) {
    console.error('inputFileAsync 错误:', e)
  }
}

/**
 * @Description: 读取文件内容并转换为json对象返回，如果文件不存在则返回false
 * @author 橘子
 */
const getFileToJson = (src) => {
  try {
    let data = fs.readFileSync(src, 'utf-8')
    return JSON.parse(data)
  } catch (e) {
    console.error('getFileToJson 错误:', e)
    return false
  }
}

/**
 * @Description: 写文件，如果文件不存在则创建，如果文件存在则覆盖，如果写入失败则返回false，成功则返回true
 * @author 橘子
 */
const toWriteFile = (src, text) => {
  try {
    fsextra.outputFileSync(src, text)
    return true
  } catch (e) {
    console.error('toWriteFile 错误:', e)
    return false
  }
}

/**
 * @Description: 写json文件，如果文件不存在则创建，如果文件存在则覆盖，如果写入失败则返回false，成功则返回true
 * @author 橘子
 */
const writeJsonSync = (src, data) => {
  try {
    fsextra.writeJsonSync(src, data)
    return true
  } catch (e) {
    console.error('writeJsonSync 错误:', e)
    return false
  }
}

module.exports = {
  readDirDepthFileSync,
  pathFileIsEmptyAsync,
  inputFileAsync,
  readDirSync,
  writeJsonSync,
  getFileToJson,
  toWriteFile
}

